
/*

   Arduino所采用的ATmega8微处理器一其有6个模数转换器（ADC，Analog to Digital Converter），
   每一个模数转换器的精度都是10bit，也就是说能够读取1024（2^10 = 1024）个状态。
   在Arduino的每一个模拟输入管脚上，电压的变化范畴是从0V到5V，
   因此Arduino能够感知到的最小电压变化是4.8毫伏（5/1024 = 4.8mV）。

*/
int potpin = 0; //定义模拟接口0
int ledpin = 13; //定义数字接口13
int ctrlpin = 3;

int val = 0; //将定义变量val,并赋初值0
int count = 0;


/*

5、中位值平均滤波法（又称防脉冲干扰平均滤波法）
A、方法：
    相当于“中位值滤波法”+“算术平均滤波法”
    连续采样N个数据，去掉一个最大值和一个最小值
    然后计算N-2个数据的算术平均值
        N值的选取：3~14
B、优点：
    融合了两种滤波法的优点
    对于偶然出现的脉冲性干扰，可消除由于脉冲干扰所引起的采样值偏差
C、缺点：
    测量速度较慢，和算术平均滤波法一样
    比较浪费RAM

*/

#define N 12

char filter()
{
    char count,i,j;
    char value_buf[N];
    int sum=0;
    for(count=0;count<N;count++){
        value_buf[count] = get_ad();
        delay();
    }

    for (j=0;j<=N;j++){
        for (i=0;i<=N-j;i++){
            if (value_buf > value_buf[i+1])
            {
                temp = value_buf;
                value_buf = value_buf[i+1];
                value_buf[i+1] = temp;
            }
        }
    }

    for(count=1;count<N-1;count++)
        sum += value[count];
    return (char)(sum/(N-2));
}


void setup() {
  // put your setup code here, to run once:
  pinMode(ledpin, OUTPUT);
  pinMode(potpin, INPUT);
  pinMode(ctrlpin, OUTPUT);

  Serial.begin(9600);//设置波特率为9600

}

void loop() {
  val = analogRead(potpin); //读取模拟接口0 的值，并将其赋给val
  Serial.println(val);//显示出val 的值



  count++;
  if ((count / 100) % 2  == 0) {
    digitalWrite(ctrlpin, HIGH);
  }
  else {
    digitalWrite(ctrlpin, LOW);
  }

  digitalWrite(ledpin, HIGH); //点亮数字13 口LED。
  delay(100);
  digitalWrite(ledpin, LOW); //熄灭数字13 口LED
  delay(100);
}
